home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks '96 / Internet Chooser / reggie / light / platform.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-06-22  |  4.9 KB  |  206 lines  |  [TEXT/MMCC]

  1. /* File "platform.c", Light Sockets - Copyright (C) Matt Slot, 1996           */
  2. /* Platform specific utilities for registering and selecting network stacks.  */
  3.  
  4. #include "stddebug.h"
  5. #include "stdtypes.h"
  6.  
  7. #include "platform.h"
  8. #include "socket.h"
  9.  
  10. #if defined(PLATFORM_MAC)
  11. #include "my mactcp.h"
  12. #elif defined(PLATFORM_UNIX)
  13. #include "bsdsocks.h"
  14. #endif
  15.  
  16. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  17. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  18.  
  19. SocketResult SelectNetworkStack(SocketRef socket, NetworkStackRef &stack) {
  20.     SInt32 error = eSocketNoError;
  21.     
  22.     /* Parameter validation */
  23.     qThrowIfNull(socket, eSocketErrBadParam, kSocketErrBadParamStr);
  24.  
  25.     stack = 0;
  26.     
  27.     switch(qGetSocketProtocol(socket->GetSocketType())) {
  28.         case eSocketProtocolTCPIP:
  29. #if defined(PLATFORM_MAC)
  30.             qThrowIfNull(stack = new MacTCPStack(socket), eSocketErrOutOfMem,
  31.                     kSocketErrOutOfMemStr);
  32. #elif defined(PLATFORM_UNIX)
  33.             qThrowIfNull(stack = new BSDSocketStack(socket), eSocketErrOutOfMem,
  34.                     kSocketErrOutOfMemStr);
  35. #endif
  36.             break;
  37.     
  38.         case eSocketProtocolATalk:
  39.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  40.             break;
  41.  
  42.         case eSocketProtocolIPX:
  43.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  44.             break;
  45.  
  46.         case eSocketProtocolRPC:
  47.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  48.             break;
  49.  
  50.         case eSocketProtocolFile:
  51.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  52.             break;
  53.  
  54.         default:
  55.             qThrowErr(eSocketErrBadParam, kSocketErrBadParamStr);
  56.             break;
  57.         }
  58.  
  59. /* CATCH */
  60.     qCatch();
  61.     return(error);
  62.     }
  63.  
  64. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  65. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  66.  
  67. SocketResult ResolveNetworkAddress(SocketType suggType, Char8 *textAddress,
  68.         SocketAddressPtr socketAddress) {
  69.     SInt32 error = eSocketNoError;
  70.     
  71.     /* Parameter validation */
  72.     qThrowIfNull(socketAddress, eSocketErrBadParam, kSocketErrBadParamStr);
  73.     qThrowIfNull(textAddress, eSocketErrBadParam, kSocketErrBadParamStr);
  74.  
  75.     socketAddress->type = eSocketUninitialized;
  76.     socketAddress->length = 0;
  77.     
  78.     switch(qGetSocketProtocol(suggType)) {
  79.         case eSocketProtocolTCPIP: {
  80.             NetworkStack *stack = 0;
  81.             Bool8 loaded = false;
  82.  
  83. #if defined(PLATFORM_MAC)
  84.             if (stack = new MacTCPStack(0))
  85. #elif defined(PLATFORM_UNIX)
  86.             if (stack = new BSDSocketStack(0))
  87. #else
  88.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  89. #endif
  90.             {
  91.                 qTraceIfError(stack->DoLoad(), 0);
  92.  
  93.                 if (!error) {
  94.                     qTraceIfError(stack->DoAddressResolve(textAddress,
  95.                             socketAddress), 0);
  96.                     qTraceIfError(stack->DoUnload(), 0);
  97.                     }
  98.                     
  99.                 socketAddress->type = suggType;
  100.                 delete stack;
  101.                 }
  102.             }
  103.             break;
  104.     
  105.         case eSocketProtocolATalk:
  106.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  107.             break;
  108.  
  109.         case eSocketProtocolIPX:
  110.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  111.             break;
  112.  
  113.         case eSocketProtocolRPC:
  114.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  115.             break;
  116.  
  117.         case eSocketProtocolFile:
  118.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  119.             break;
  120.  
  121.         default:
  122.             qThrowErr(eSocketErrBadParam, kSocketErrBadParamStr);
  123.             break;
  124.         }
  125.  
  126.  
  127. /* CATCH */
  128.     qCatch();
  129.     
  130.     if (error) {
  131.         socketAddress->type = eSocketUninitialized;
  132.         socketAddress->length = 0;
  133.         }
  134.     
  135.     return(error);
  136.     }
  137.  
  138. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  139. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  140.  
  141. SocketResult LookupNetworkAddress(SocketAddressPtr socketAddress, 
  142.         Char8 *textAddress) {
  143.     SInt32 error = eSocketNoError;
  144.     
  145.     /* Parameter validation */
  146.     qThrowIfNull(socketAddress, eSocketErrBadParam, kSocketErrBadParamStr);
  147.     qThrowIfNull(textAddress, eSocketErrBadParam, kSocketErrBadParamStr);
  148.  
  149.     *textAddress = 0;
  150.     
  151.     switch(qGetSocketProtocol(socketAddress->type)) {
  152.         case eSocketProtocolTCPIP: {
  153.             NetworkStack *stack = 0;
  154.             Bool8 loaded = false;
  155.  
  156. #if defined(PLATFORM_MAC)
  157.             if (stack = new MacTCPStack(0))
  158. #elif defined(PLATFORM_UNIX)
  159.             if (stack = new BSDSocketStack(0))
  160. #else
  161.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  162. #endif
  163.             {
  164.                 qTraceIfError(stack->DoLoad(), 0);
  165.  
  166.                 if (!error) {
  167.                     qTraceIfError(stack->DoAddressLookup(socketAddress,
  168.                             textAddress), 0);
  169.                     qTraceIfError(stack->DoUnload(), 0);
  170.                     }
  171.                 delete stack;
  172.                 }
  173.             }
  174.             break;
  175.     
  176.         case eSocketProtocolATalk:
  177.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  178.             break;
  179.  
  180.         case eSocketProtocolIPX:
  181.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  182.             break;
  183.  
  184.         case eSocketProtocolRPC:
  185.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  186.             break;
  187.  
  188.         case eSocketProtocolFile:
  189.             qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
  190.             break;
  191.  
  192.         default:
  193.             qThrowErr(eSocketErrBadParam, kSocketErrBadParamStr);
  194.             break;
  195.         }
  196.  
  197.  
  198. /* CATCH */
  199.     qCatch();
  200.     
  201.     if (error)
  202.         *textAddress = 0;
  203.     
  204.     return(error);
  205.     }
  206.